from abc import ABC, abstractmethod
from typing import List, Optional


class ICategoryManager(ABC):
    """
    分类管理器接口
    定义分类管理应该提供的所有方法
    """
    
    @abstractmethod
    def get_all_categories(self) -> List[str]:
        """
        获取所有已定义的分类
        
        Returns:
            分类名称列表
        """
        pass
    
    @abstractmethod
    def add_category_with_desc(self, name: str, desc: str) :
        """
        添加新分类
        
        Args:
            category: 分类名称
        
        Returns:
            None
        """
        pass
    
    @abstractmethod
    def delete_category(self, category: str) -> bool:
        """
        删除分类
        
        Args:
            category: 分类名称
        
        Returns:
            删除是否成功
        """
        pass
    
    @abstractmethod
    def is_category_exist(self, category: str) -> bool:
        """
        检查分类是否存在
        
        Args:
            category: 分类名称
        
        Returns:
            分类是否存在
        """
        pass
    
    @abstractmethod
    def save_categories(self) -> bool:
        """
        保存分类到持久化存储
        
        Returns:
            保存是否成功
        """
        pass
    
    @abstractmethod
    def load_categories(self) -> bool:
        """
        从持久化存储加载分类
        
        Returns:
            加载是否成功
        """
        pass